package main

import "fmt"

// ListNode 定义单链表节点结构体
type ListNode struct {
	Val  int
	Next *ListNode
}

// hasCycle 函数用于检测链表是否存在循环
func hasCycle(head *ListNode) bool {
	if head == nil || head.Next == nil {
		return false
	}

	slow := head
	fast := head

	for fast != nil && fast.Next != nil {
		slow = slow.Next
		fast = fast.Next.Next

		if slow == fast {
			return true
		}
	}

	return false
}

func main() {
	// 创建链表节点
	node1 := &ListNode{Val: 1, Next: nil}
	node2 := &ListNode{Val: 2, Next: nil}
	node3 := &ListNode{Val: 3, Next: nil}

	// 构建循环链表
	node1.Next = node2
	node2.Next = node3
	node3.Next = node1 // 这里形成了循环

	// 检测链表是否存在循环
	result := hasCycle(node1)
	fmt.Println("链表是否存在循环:", result)
}
